#include <bits/stdc++.h>
#include <string>
using namespace std;

int boss[101];  // boss[i]  编号为i的老大是谁
int FindBoss(int x) // 不停认老大, 直到顶头上司
{
    if (boss[x] == x)
        return x;
    else
    {
        // 路径压缩, 将路径上所有点的上级都设置为根节点
        boss[x] = FindBoss(boss[x]); // 递归返回
        return boss[x];
    }
}

void join(int x, int y) // 合并两个团伙
{
    // m为x的老大, n为y的老大
    int m = FindBoss(x), n = FindBoss(y);
    if (m != n)
        boss[n] = m;
}

int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        boss[i] = i; // 初始化自己为老大
    int a, b;
    for (int i = 0; i < m; i++)
    {
        cin >> a >> b;
        join(a, b); // 合并团伙
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        if (boss[i] == i)
            ans += 1;
    }
    cout << ans;
    return 0;
}